/*
 * 文件名：CarInAndOutService.java	 
 * 时     间：下午10:10:45
 * 作     者：Administrator       
 * 版     权： 2012-2022 湖南智软网络科技, 公司保留所有权利.
 * 联     系：http://www.073586.com/
 */
package com.local.service.face;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.local.entity.ex.CarParkOutEx;
import com.local.entity.vo.CarBillVo;
import com.local.entity.vo.CarInAndOutPhotoVo;
import com.local.entity.vo.CarInManualOpenVo;
import com.local.entity.vo.CarOutInfoVo;
import com.local.entity.vo.CarParkInOverVo;
import com.local.entity.vo.ReportCarInfoVo;
import com.local.entity.webpush.CarInPushVo;
import com.local.model.AdminCarInBill;
import com.local.model.CarParkIn;
import com.local.model.CarParkInCopy;
import com.local.model.CarParkOut;
import com.local.model.CarParkOutCopy;
import com.local.model.LocalCarInRepertory;
import com.local.model.LocalChargeBytimeCopy;
import com.local.model.LocalChargeBytimeType;
import com.local.model.LocalPayBill;
import com.local.model.Screen;
import com.local.page.CarInAndOutPageInfo;
import com.qianhai.common.exception.BaseException;
import com.qianhai.common.service.face.BaseService;

/**
 * 类描述:这里是类描述
 * 
 * @ClassName: CarInAndOutService
 * @author Administrator
 * @date 2015年4月2日 下午10:10:45
 */
public interface CarInAndOutService extends BaseService<Object, Object, String>
{
	/**
	 * 
	 * 方法描述：第三方插入平台数据
	 * 
	 * @Title: parkIn
	 * @param @param carParkIn
	 * @param @return
	 * @param @throws BaseException
	 * @return boolean
	 * @user Administrator 2015年11月19日
	 * @throws
	 */
	public boolean parkIn(CarParkIn carParkIn) throws BaseException;
	
	/**
	 * 
	 * 方法描述： 添加车辆入场,检测车辆类型信息：会员、黑名单、临时车辆、平台会员、等 如果启用默认不开闸则车辆状态为2
	 * 
	 * @Title: addCarParkInBill
	 * @param @param carParkInBill
	 * @param @return
	 * @param @throws BaseException
	 * @return Integer
	 * @user binghen 2015年4月2日
	 * @throws
	 */
	public boolean addCarParkInBill(CarParkIn carParkIn) throws BaseException;
	
	
	/**
	 * 
	 * 方法描述：     重构进场、方法只做进场查询（无需事物）。直接返回返回相机标记.
	 * @Title: overAddCarParkInBill 
	 * @param @param carParkIn
	 * @param @return
	 * @param @throws BaseException
	 * @return CarParkInVo
	 * @user Administrator
	 * 2016年3月24日
	 * @throws
	 */
	public CarParkInOverVo findOverAddCarParkInBill(CarParkIn carParkIn) throws BaseException;
	
	/**
	 * 
	 * 方法描述： 添加出场
	 * 
	 * @Title: addCarParkOutBill
	 * @param @param carParkOutBill
	 * @param @return
	 * @param @throws BaseException
	 * @return Integer
	 * @user Administrator 2015年4月2日
	 * @throws
	 */
	public Integer addCarParkOutBill(CarParkOut carParkOut)
			throws BaseException;
	
	/**
	 * 
	 * 方法描述： 查询车辆入场
	 * 
	 * @Title: queryCarInByPage
	 * @param @param page
	 * @return void
	 * @user Administrator 2015年4月2日
	 * @throws
	 */
	public void queryCarInByPage(CarInAndOutPageInfo<CarParkIn> page);
	
	//通过岗亭查询，最新在场的所有数据
	public void queryCarInByStationPage(CarInAndOutPageInfo<CarParkIn> page);
	
	
	/**
	 * 
	 * 方法描述： 查询车辆入场
	 * 
	 * @Title: queryCarInCopyByPage
	 * @param @param page
	 * @return void
	 * @user Administrator 2015年4月2日
	 * @throws
	 */
	public void queryCarInCopyByPage(CarInAndOutPageInfo<CarParkInCopy> page);
	
	/**
	 * 
	 * 方法描述：
	 * 
	 * @Title: queryCarOutByPage
	 * @param @param page
	 * @return void
	 * @user Administrator 2015年4月2日
	 * @throws
	 */
	public void queryCarOutByPage(CarInAndOutPageInfo<CarParkOut> page);
	
	/**
	 * 
	 * 方法描述：
	 * 
	 * @Title: queryCarOutCopyByPage
	 * @param @param page
	 * @return void
	 * @user Administrator 2015年4月2日
	 * @throws
	 */
	public void queryCarOutCopyByPage(CarInAndOutPageInfo<CarParkOutCopy> page);
	
	/**
	 * 
	 * 方法描述：无车辆进场信息，匹配模糊查询
	 * 
	 * @Title: queryLikeCarInByPage
	 * @param @param page
	 * @return void
	 * @user Administrator 2015年10月2日
	 * @throws
	 */
	public void queryLikeCarInByPage(CarInAndOutPageInfo<LocalCarInRepertory> page);
	
	List<CarParkIn> queryInEquipment(String equipment, Date createTime)
			throws BaseException;
	
	List<CarParkOut> queryOutEquipment(String equipment, Date createTime)
			throws BaseException;
	
	public void updateCarParkOutBill(CarParkOut carParkOut);
	
	public void updateCarParkInBill(CarParkIn carParkIn);
	
	public CarParkIn selectCarParkInByPrimaryKey(String recordId);
	
	public CarParkOut selectCarParkOutByPrimaryKey(String recordId);
	
	/**
	 * 
	 * 方法描述：
	 * 
	 * @Title: selectCarParkInByRecordId
	 * @param @param recordId
	 * @param @return
	 * @return CarParkIn
	 * @user binghen 2015年7月20日
	 * @throws
	 */
	public CarParkIn selectCarParkInByRecordId(String recordId);
	
	/**
	 * 
	 * 方法描述：
	 * 
	 * @Title: selectCarParkOutByRecordId
	 * @param @param recordId
	 * @param @return
	 * @return CarParkOut
	 * @user Administrator 2015年7月20日
	 * @throws
	 */
	public CarParkOut selectCarParkOutByRecordId(String recordId);
	
	public CarInAndOutPhotoVo returnPhotoVo(String uuid) throws BaseException;
	
	public Integer selectCarIn(CarParkIn carParkIn);
	
	public Integer selectCarOut(CarParkOut carParkOut);
	
	/**
	 * 
	 * 方法描述： 批量删除carIn
	 * 
	 * @Title: deleteCarInInfo
	 * @param @param uuids
	 * @param @return
	 * @param @throws BaseException
	 * @return Integer
	 * @user lyf 2015年11月23日
	 * @throws
	 */
	public Integer deleteCarInInfo(List<String> uuids) throws BaseException;
	
	/**
	 * 
	 * 方法描述： 批量删除carInCopy
	 * 
	 * @Title: deleteCarInCopyInfo
	 * @param @param uuids
	 * @param @return
	 * @param @throws BaseException
	 * @return Integer
	 * @user lyf 2015年11月23日
	 * @throws
	 */
	public Integer deleteCarInCopyInfo(List<String> uuids) throws BaseException;
	
	/**
	 * 
	 * 方法描述： 删除出场记录
	 * 
	 * @Title: deleteCarOutInfo
	 * @param @param uuids
	 * @param @return
	 * @param @throws BaseException
	 * @return Integer
	 * @user lyf 2015年11月23日
	 * @throws
	 */
	public Integer deleteCarOutInfo(List<String> uuids) throws BaseException;
	
	/**
	 * 
	 * 方法描述： 删除出场记录
	 * 
	 * @Title: deleteCarOutCopyInfo
	 * @param @param uuids
	 * @param @return
	 * @param @throws BaseException
	 * @return Integer
	 * @user lyf 2015年11月23日
	 * @throws
	 */
	public Integer deleteCarOutCopyInfo(List<String> uuids) throws BaseException;
	
	/**
	 * 
	 * 方法描述：查询车辆出场有没有支付流水
	 * 
	 * @Title: contrastCarBill
	 * @param @param carParkOut
	 * @param @return
	 * @return boolean
	 * @user Administrator 2015年10月1日
	 * @throws
	 */
	public boolean contrastCarBill(CarParkOut carParkOut);
	
	/**
	 * 
	 * 方法描述： 车辆出场时查询流水信息
	 * 
	 * @Title: seachCarOutBill
	 * @param @param carParkOut
	 * @param @return
	 * @return LocalPayBill
	 * @user lyf 2015年10月15日
	 * @throws
	 */
	public LocalPayBill seachCarOutBill(CarParkOut carParkOut);
	
	/**
	 * 
	 * 方法描述：模糊查询，匹配出场车牌号，获取当前入场的最新匹配数据
	 * 
	 * @Title: findByCarNoMatch
	 * @param @param carNo
	 * @param @return
	 * @return List<CarParkIn>
	 * @user Administrator 2015年10月1日
	 * @throws
	 */
	public List<CarParkIn> findByCarNoMatch(String carNo);
	
	/**
	 * 
	 * 方法描述：查询最新进场纪录(前5条),用于显示在home页面 值=1
	 * 
	 * @Title: queryNewCarIn
	 * @param @return
	 * @return List<CarParkIn>
	 * @user lyf 2015年11月3日
	 * @throws
	 */
	public List<CarParkIn> queryNewCarIn(String stationUuid);
	
	/**
	 * 
	 * 方法描述：查询待进场纪录
	 * 
	 * @Title: queryStayCarIn
	 * @param @return
	 * @return List<CarParkIn>
	 * @user lyf 2015年11月3日
	 * @throws
	 */
	public List<CarParkIn> queryStayCarIn(String stationUuid);
	
	//通过岗亭，查找所有待进场数据
	public void queryStayCarInByStation(CarInAndOutPageInfo<CarParkIn> page);
	
	/**
	 * 
	 * 方法描述： 查询最新5条出场
	 * 
	 * @Title: queryStayCarOut
	 * @param @return
	 * @return List<CarParkOut>
	 * @user lyf 2015年11月3日
	 * @throws
	 */
	public List<CarParkOut> queryStayCarOut(String stationUuid);
	
	/**
	 * 
	 * 方法描述： 查询进场纪录
	 * 
	 * @Title: queryCarInByUuid
	 * @param @param uuid
	 * @param @return
	 * @return CarParkIn
	 * @user lyf 2015年11月4日
	 * @throws
	 */
	public CarParkIn queryCarInByUuid(String uuid);
	
	/**
	 * 
	 * 方法描述：查询出场纪录，如果有进场纪录则在查询出场
	 * 
	 * @Title: queryCarOutByUuid
	 * @param @param uuid
	 * @param @return
	 * @return CarParkOutEx
	 * @user lyf 2015年11月4日
	 * @throws
	 */
	public CarParkOutEx queryCarOutByUuid(String uuid);
	
	/**
	 * 
	 * 方法描述： 相机异步同步车辆进场或出场图片
	 * 
	 * @Title: asyncPhotoForInOrOut
	 * @param @param ftpInfo
	 * @param @return
	 * @param @throws BaseException
	 * @return Integer
	 * @user lyf 2015年11月5日
	 * @throws
	 */
	public Integer asyncPhotoForInOrOut(CarBillVo ftpInfo) throws BaseException;
	
	/**
	 * 
	 * 方法描述： 获取车辆身份信息,如： 1. 临时车 2.会员 3.平台用户 4.白名单 5.黑名单 6.黄名单
	 * 
	 * @Title: getIdentityTypeByCarNo
	 * @param @param carNo
	 * @param @return
	 * @return String
	 * @user lyf 2015年11月6日
	 * @throws
	 */
	public Map<String,Object> getIdentityTypeByCarNo(String carNo);
	
	//根据火眼相机，传送过来的 车牌信息(0未知车牌1蓝色小汽车2黑牌小汽车3单排黄车4双排黄车5警车车牌6武警车牌7个性化车牌8单排军车车牌9双排军车车牌......)
	public LocalChargeBytimeType getFirCarTypeNo(String type);
	
	//上报转换 进
	public ReportCarInfoVo ReportCarInfoVoIn(CarParkIn carParkIn) throws BaseException;
	
	//上报转换 进
	public ReportCarInfoVo ReportCarInfoVoOut(CarParkOut carParkOut) throws BaseException;
	
	/**
	 * 
	 * 方法描述：  查询在场车辆
	 * @Title: findCarInByCarNo 
	 * @param @param carNo
	 * @param @return
	 * @return CarParkIn
	 * @user lyf
	 * 2016年2月28日
	 * @throws
	 */
	public CarParkIn findCarInByCarNo(String carNo);
	
	
	/**
	 * 
	 * 方法描述：通过定时器设置的天数，来删除进出，以及副本表的数据
	 * @Title: deleteCarParkIn 
	 * @param @param carInDays
	 * @param @return
	 * @return Integer
	 * @user Administrator
	 * 2016年3月14日
	 * @throws
	 */
	public Integer deleteCarParkIn(Date carInDays);
	
	public Integer deleteCarParkOut(Date carOutDays);
	
	public Integer deleteCarParkInCopy(Date carInHistoryDays);
	
	public Integer deleteCarParkOutCopy(Date carOutHistoryDays);
	
	public void deleteCarInAndRepertory();
	
	/**
	 * 
	 * 方法描述：批量新增进场索引
	 * @Title: batchCreateCarParkInIndex 
	 * @param 
	 * @return void
	 * @user Administrator
	 * 2016年3月18日
	 * @throws
	 */
	public void batchCreateCarParkInIndex();
	
    /**
     * 
     * 方法描述：本地进场数据处理
     * @Title: localCarParkInData 
     * @param @param carInVo
     * @param @throws BaseException
     * @return void
     * @user Administrator
     * 2016年3月25日
     * @throws
     */
	public void localCarParkInData(CarParkInOverVo carInVo) throws BaseException;
	
	/**
	 * 
	 * 方法描述：推送前端开闸状态.修改使用find 无需事物
	 * @Title: pushCarInBillInfo 
	 * @param @param carInpushVo
	 * @return void
	 * @user Administrator
	 * 2016年4月1日
	 * @throws
	 */
	public void findPushCarInBillInfo(CarInPushVo carInpushVo) ;
	
	/**
	 * 
	 * 方法描述：进场数据云同步
	 * @Title: pushCarParkInInfo 
	 * @param @param carInVo
	 * @param @throws BaseException
	 * @return void
	 * @user Administrator
	 * 2016年3月25日
	 * @throws
	 */
	public void pushCarParkInInfo(CarParkInOverVo carInVo) throws BaseException;
	
	/**
	 * 
	 * 方法描述： 车辆进场后，把进场计费副本上传到云.
	 * @Title: setRuleCopy 
	 * @param @param localChargeBytimeCopy
	 * @return void
	 * @user Administrator
	 * 2016年4月1日
	 * @throws
	 */
	public void setRuleCopy(LocalChargeBytimeCopy localChargeBytimeCopy);
	
	/**
	 * 
	 * 方法描述： 推送总车位数
	 * @Title: pushParkLot 
	 * @param 
	 * @return void
	 * @user Administrator
	 * 2016年4月1日
	 * @throws
	 */
	public void pushParkLot();
	
	/**
	 * 
	 * 方法描述：车辆进场手动开闸同步到云
	 * @Title: pushManualOpenCloud 
	 * @param @param vo
	 * @param @throws BaseException
	 * @return void
	 * @user Administrator
	 * 2016年3月29日
	 * @throws
	 */
	public void pushManualOpenCloud(AdminCarInBill adminCarInBill,CarInManualOpenVo vo) throws BaseException;

	/** 
	 * 方法描述：通过出场ID查询出场详情
	 * @Title: findCarOutInfoByCarOutUuid 
	 * @param @param uuid
	 * @param @return
	 * @return CarOutInfoVo
	 * @user pichunhan
	 * 2016年4月19日
	 * @throws
	 */
	public CarOutInfoVo findCarOutInfoByCarOutUuid(String uuid);
	
	
	/**
	 * 
	 * 方法描述：存放车辆在场记录临时表
	 * @Title: inserCarInRepertory 
	 * @param @param carInVo
	 * @return void
	 * @user pichunhan
	 * 2016年4月22日
	 * @throws
	 */
	public void inserCarInRepertory(CarParkInOverVo carInVo);

	/** 
	 * 方法描述：更新车辆在场记录临时表
	 * @Title: updateCarInRepertory 
	 * @param @param carInInfo
	 * @return void
	 * @user pichunhan
	 * 2016年4月22日
	 * @throws
	 */
	public void updateCarInRepertory(CarParkIn carInInfo);

	/**
	 * 
	 * 方法描述：旧版本升级新版本特性
	 * @Title: convertCarIn 
	 * @param 
	 * @return void
	 * @user pichunhan
	 * 2016年5月9日
	 * @throws
	 */
	public void convertCarIn();

	/**
	 * 
	 * 方法描述：通过车牌查询车牌类型 
	 * @Title: makeCarNoType 
	 * @param @param carParkIn
	 * @param @return
	 * @return String
	 * @user Administrator
	 * 2016年5月20日
	 * @throws
	 */
	LocalChargeBytimeType makeCarNoType(CarParkIn carParkIn);
	
	Screen queryScreenByCamelDeviceId(String cameraNo);
	
	/**
	 * 
	 * 方法描述：岗亭页面，更改在场车牌信息
	 * @Title: updateCarNo 
	 * @param @param carParkIn
	 * @param @throws BaseException
	 * @return void
	 * @user Administrator
	 * 2016年6月1日
	 * @throws
	 */
	public void updateCarNo(CarParkIn carParkIn)throws BaseException;
	
}
